Spies এর মাধ্যমে ফাংশনের Arguments এবং Return Values যাচাই

Spies ব্যবহার করে ফাংশন টেস্ট করা - জ্যাসমিনজেএস (JasmineJS) - Web Development

406

JasmineJS এ Spies একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে ফাংশনের arguments (আর্গুমেন্ট) এবং return values (ফলাফল) পরীক্ষা করতে সহায়তা করে। একটি Spy মূলত একটি "fake" ফাংশন তৈরি করে, যা আসল ফাংশনটি কল করার সময় তার কার্যকারিতা বা আচরণ সিমুলেট করে এবং তার আর্গুমেন্ট বা রিটার্ন ভ্যালু পরীক্ষা করার সুযোগ দেয়।

Spies সাধারণত টেস্টিংয়ের সময় তখন ব্যবহার করা হয় যখন আপনি চান ফাংশনটি আসলে কাজ করছে কিনা, এবং যে আর্গুমেন্টগুলি তা গ্রহণ করছে বা যে রিটার্ন ভ্যালু তা প্রদান করছে তা সঠিক কিনা।


Jasmine Spies এর মৌলিক ব্যবহার

JasmineJS এ স্পাই ব্যবহার করতে হলে spyOn() মেথড ব্যবহার করতে হয়। এটি একটি ফাংশনকে স্পাই করে এবং তার কার্যকারিতা পরীক্ষা করার জন্য সেই ফাংশনের আর্গুমেন্ট এবং রিটার্ন ভ্যালু ট্র্যাক করে।


spyOn() মেথড

spyOn() মেথডটি একটি ফাংশনকে স্পাই করতে ব্যবহৃত হয়। এটি ঐ ফাংশনের আচরণ ট্র্যাক করে, যেমন কিভাবে ফাংশনটি কল হয়েছে, কি আর্গুমেন্ট পাস করা হয়েছে, এবং ফাংশনটি কি রিটার্ন ভ্যালু প্রদান করেছে।

spyOn(object, 'methodName');

এখানে:

  • object: যেই অবজেক্টে ফাংশনটি অবস্থিত (যেমন কোনো ক্লাস বা মডিউল)।
  • methodName: যেই মেথড/ফাংশনটি আপনি স্পাই করতে চান।

ফাংশনের আর্গুমেন্ট যাচাই

JasmineJS এ স্পাই ব্যবহার করে আপনি ফাংশনের আর্গুমেন্ট চেক করতে পারেন। spyOn() মেথডটি ফাংশনটি কল হওয়া সময় তার আর্গুমেন্ট সংগ্রহ করে রাখে, এবং এরপর আপনি সেই আর্গুমেন্টগুলো যাচাই করতে পারেন।

উদাহরণ:

describe("Function arguments check", function() {
  it("should verify the arguments passed to the function", function() {
    const obj = {
      greet: function(name, age) {
        return `Hello, ${name}, Age: ${age}`;
      }
    };

    // spyOn() দ্বারা greet ফাংশনটি স্পাই করা হচ্ছে
    spyOn(obj, 'greet');

    // ফাংশনটি কল করা হচ্ছে
    obj.greet('John', 30);

    // আর্গুমেন্ট যাচাই
    expect(obj.greet).toHaveBeenCalledWith('John', 30);
  });
});

এখানে:

  • spyOn(obj, 'greet'): greet ফাংশনটি স্পাই করা হয়েছে।
  • expect(obj.greet).toHaveBeenCalledWith('John', 30): চেক করা হয়েছে যে greet ফাংশনটি 'John' এবং 30 আর্গুমেন্ট নিয়ে কল হয়েছে কি না।

ফাংশনের রিটার্ন ভ্যালু যাচাই

JasmineJS এ স্পাই ব্যবহার করে আপনি ফাংশনের return value (ফলাফল) চেক করতে পারেন। স্পাই মেথডটি আপনাকে ঐ ফাংশনের রিটার্ন ভ্যালু ট্র্যাক করতে এবং পরবর্তীতে যাচাই করতে সহায়তা করে।

উদাহরণ:

describe("Function return value check", function() {
  it("should verify the return value of the function", function() {
    const obj = {
      multiply: function(a, b) {
        return a * b;
      }
    };

    // spyOn() দ্বারা multiply ফাংশনটি স্পাই করা হচ্ছে
    spyOn(obj, 'multiply').and.returnValue(10);

    // ফাংশনটি কল করা হচ্ছে
    const result = obj.multiply(2, 5);

    // রিটার্ন ভ্যালু যাচাই
    expect(result).toBe(10);
  });
});

এখানে:

  • spyOn(obj, 'multiply').and.returnValue(10): multiply ফাংশনটি স্পাই করা হয়েছে এবং সেটি নির্দিষ্ট একটি রিটার্ন ভ্যালু (10) রিটার্ন করবে।
  • expect(result).toBe(10): চেক করা হয়েছে যে multiply ফাংশনটি 10 রিটার্ন করেছে।

আর্গুমেন্ট এবং রিটার্ন ভ্যালু একসাথে যাচাই

JasmineJS এ আপনি স্পাই ব্যবহার করে একই সময়ে ফাংশনের আর্গুমেন্ট এবং রিটার্ন ভ্যালু উভয়ই যাচাই করতে পারেন।

উদাহরণ:

describe("Function arguments and return value check", function() {
  it("should verify both the arguments and return value", function() {
    const obj = {
      divide: function(a, b) {
        if (b === 0) {
          return "Cannot divide by zero";
        }
        return a / b;
      }
    };

    // spyOn() দ্বারা divide ফাংশনটি স্পাই করা হচ্ছে
    spyOn(obj, 'divide');

    // ফাংশনটি কল করা হচ্ছে
    const result1 = obj.divide(10, 2);
    const result2 = obj.divide(10, 0);

    // আর্গুমেন্ট যাচাই
    expect(obj.divide).toHaveBeenCalledWith(10, 2);
    expect(obj.divide).toHaveBeenCalledWith(10, 0);

    // রিটার্ন ভ্যালু যাচাই
    expect(result1).toBe(5);
    expect(result2).toBe("Cannot divide by zero");
  });
});

এখানে:

  • expect(obj.divide).toHaveBeenCalledWith(10, 2) এবং expect(obj.divide).toHaveBeenCalledWith(10, 0): ফাংশনটি সঠিক আর্গুমেন্টের সাথে কল হয়েছে কিনা তা যাচাই করা হচ্ছে।
  • expect(result1).toBe(5) এবং expect(result2).toBe("Cannot divide by zero"): রিটার্ন ভ্যালু চেক করা হচ্ছে।

Jasmine এর Spies এর অন্যান্য বৈশিষ্ট্য

  1. and.callThrough(): এটি স্পাই করা ফাংশনকে আসল ফাংশন হিসেবে কার্যকর করতে সহায়তা করে। অর্থাৎ, ফাংশনটি আসলেই কাজ করবে এবং তার আর্গুমেন্ট এবং রিটার্ন ভ্যালু ট্র্যাক করা হবে।

    spyOn(obj, 'method').and.callThrough();
    
  2. and.callFake(): এটি স্পাই করা ফাংশনের জন্য একটি fake function (কৃত্রিম ফাংশন) সেট করতে ব্যবহৃত হয়, যা ঐ ফাংশনের আসল কার্যকারিতা পরিবর্তন করতে পারে।

    spyOn(obj, 'method').and.callFake(function() {
      return 'Fake result';
    });
    
  3. and.returnValue(): এটি স্পাই করা ফাংশনের জন্য একটি নির্দিষ্ট রিটার্ন ভ্যালু প্রদান করে।

    spyOn(obj, 'method').and.returnValue(10);
    
  4. and.throwError(): এটি স্পাই করা ফাংশনের জন্য একটি ত্রুটি (error) ছুঁড়তে ব্যবহৃত হয়।

    spyOn(obj, 'method').and.throwError('An error occurred');
    

সারাংশ

JasmineJS এ Spies একটি গুরুত্বপূর্ণ টুল যা আপনাকে ফাংশনের আর্গুমেন্ট এবং রিটার্ন ভ্যালু পরীক্ষা করতে সহায়তা করে। spyOn() মেথডের মাধ্যমে আপনি ফাংশন স্পাই করতে পারেন, এবং toHaveBeenCalledWith() বা toBe() এর মতো matchers ব্যবহার করে আর্গুমেন্ট এবং রিটার্ন ভ্যালু যাচাই করতে পারেন। এছাড়াও, Jasmine এর callThrough(), callFake(), এবং returnValue() মেথডের মাধ্যমে স্পাইয়ের আচরণ নিয়ন্ত্রণ করা যায়, যা টেস্টিংয়ের ক্ষেত্রে অত্যন্ত কার্যকরী।

Content added By
Promotion

Are you sure to start over?

Loading...